import { Global, Module } from "@nestjs/common";
import { ConfigModule as Config } from "@nestjs/config";
import Joi from "joi";
// import * as dotenv from 'dotenv';


// 通过cross-env设置env环境，可以接受字符串和数组，数组的话就是会有访问优先级，靠前优先级高
const envFilePath = [`.env.${process.env.NODE_ENV || 'dev'}`, '.env']
const schema = Joi.object({    // 对env的字段进行校验
    NODE_ENV: Joi.string()
        .valid('dev', 'prod')
        .default('dev'),
    DB_PORT: Joi.number().default(3306).valid(3306, 3308), //  valid是设置范围
    DB_HOST: Joi.string().ip(), // 校验是否是ip
    DB_url: Joi.string().domain(), // 校验是否是域名
})


/**
 * 多环境配置
 */
@Global()   // 全局模块
@Module({
    imports: [
        Config.forRoot({
            isGlobal: true, // 表示在全局使用
            envFilePath: envFilePath, // 定义env文件的路径
            // load: [() => dotenv.config({path: '.env'})], //加载公共env
            validationSchema: schema
        })
    ]
})
export class ConfigModule {
    /* static forRoot(options: { path: string }) {     // 动态模块
        return {
            module: ConfigModule,
            providers: [
                {
                    provide: "Config",
                    useValue: { baseApi: "/api" + options.path }
                }
            ],
            exports: [
                {
                    provide: "Config",
                    useValue: { baseApi: "/api" + options.path }
                }
            ]
        }
    } */
}